题目大意:有一棵树,从中选取$2$条链,其中任何一条链的端点不能被另一条链包含,求这两条链,使这两条链的公共的点的部分最长,若相同,使得总长度最长。
因为其中任何一条链的端点不能被另一条链包含,所以重合线段的两个端点的度一定$\geqslant3($两条链的端点在这个节点处分开),在一棵树上要求公共部分最长,有点像求树的直径的做法,两遍$dfs$,特殊的是在更新答案时只有这个点度$\geqslant3$时才更新。
这道题还有个要求,在求公共部分最长的情况下还要使总长度最长
那我们就在$u$和$v$的子树中,找离根最远和次远的点即可。
为了保证求出的两个端点的子树中,“离根最远和次远的点到根距离之和”是最长的,所以在dfs的时候若两个点距离根同样远,则根据它们“离根最远和次远的点到根距离之和”的大小来判断即可。
1 |
|